<?php
/**
 * This file is part of workerman.
 *
 * Licensed under The MIT License
 * For full copyright and license information, please see the MIT-LICENSE.txt
 * Redistributions of files must retain the above copyright notice.
 *
 * @author walkor<walkor@workerman.net>
 * @copyright walkor<walkor@workerman.net>
 * @link http://www.workerman.net/
 * @license http://www.opensource.org/licenses/mit-license.php MIT License
 */

/**
 * 用于检测业务代码死循环或者长时间阻塞等问题
 * 如果发现业务卡死，可以将下面declare打开（去掉//注释），并执行php start.php reload
 * 然后观察一段时间workerman.log看是否有process_timeout异常
 */
//declare(ticks=1);

use \GatewayWorker\Lib\Gateway;

/**
 * 主逻辑
 * 主要是处理 onConnect onMessage onClose 三个方法
 * onConnect 和 onClose 如果不需要可以不用实现并删除
 */
class Events
{

    
    /**
     * 当客户端连接时触发
     * 如果业务不需此回调可以删除onConnect
     * 
     * @param int $client_id 连接id
     */
    public static function onConnect($client_id) {
        // 向当前client_id发送数据 
        Gateway::sendToClient($client_id, "ok $client_id\n");
        /*// 向所有人发送
        Gateway::sendToAll("$client_id login\n");*/
    }
    
   /**
    * 当客户端发来消息时触发
    * @param int $client_id 连接id
    * @param mixed $message 具体消息
    */
   public static function onMessage($client_id, $message) {
        // var_dump($client_id);
        var_dump($message);
        
        $path = '/data/www/zmartec_band/runtime/log/'.date('Ym').'/workerman'.date('d').'.log';
        //var_dump($path);
        $str = PHP_EOL."***************************".date('Y-m-d H:i:s')."*****************************".PHP_EOL;
        file_put_contents($path,$str.$client_id.$message,FILE_APPEND);
        var_dump($_SERVER["REMOTE_ADDR"]);//die();
        $arr = json_decode($message,true);
        // var_dump($arr);
        // 向所有人发送 
        if($_SERVER["REMOTE_ADDR"] == "127.0.0.1"){//本机发送过来的消息发送给客户端

            // Gateway::sendToAll($message);
            $arr = explode('*',$message);
            var_dump($arr[1]);
            GateWay::sendToUid($arr[1],$message);
        }else if( !isset($arr['event']) ){



              $data = substr($message,33,-1);
              $totle = explode(',', $data);
              $info = explode('*', $totle[0]);
              //绑定id
              if(isset($info[1])){
                  //var_dump($info[1]);
                  Gateway::bindUid($client_id,$info[1]);
              }
              
            
              if(isset($info[3]) && $info[3] == 'KA'){
          
                // $connection->send('['.$totle[0].']');
                GateWay::sendToUid($info[1],'['.$data.']');    
            
              }
              $out['client_id'] = $client_id;
              $out['message'] = $message;
              $data = http_build_query($out);
              $len = strlen($data);
              $host = '39.108.145.12';        
              $port = '8701';        
              $path = '/index.php/Push/Worker/onMessage';
              $fp = fsockopen($host , $port, $errno, $errstr, 30);
              if ($fp) {
                  stream_set_blocking($fp,true);//开启了手册上说的非阻塞模式  
                  stream_set_timeout($fp,60);//设置超时  
                  $out = "POST $path HTTP/1.1\r\n";
                  $out .= "Host: $host\r\n";
                  $out .= "Content-type: application/x-www-form-urlencoded\r\n";
                  $out .= "Content-Length: $len\r\n";
                  $out .= "Connection: close\r\n";
                  $out .= "\r\n";
                  $out .= $data."\r\n";
                  fwrite($fp, $out);
                  fclose($fp);
              }
        }
        
   }
   
   /**
    * 当用户断开连接时触发
    * @param int $client_id 连接id
    */
   public static function onClose($client_id) {
       // 向所有人发送 
       /*GateWay::sendToAll("$client_id logout");*/
   }

   
}
